// PROGRAMA : SCRPE002(BATCH = > JCL2)
// :(GERADO A PARTIR DO SCRPP004)
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : HISTORICO DE EMISSOES DE ATESTADOS DE
// ANTECEDENTTES PERIODO E USUARIO.
// PARA O SHOPPING DO CIDADAO
// PROGRAMADOR:
// DATA : 01/07/2002
// OBS : ESTE PROGRAMA DEVE SER RODADADO COM O "JCL2"
// :
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrpe002Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpe002A;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicEstatistica;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpe002 OBJETIVO : HISTORICO DE EMISSOES DE ATESTADOS DE ANTECEDENTTES PERIODO E USUARIO. PARA O SHOPPING DO CIDADAO *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrpe002")
public class Scrpe002 {
	// Views utilizadas
	SicEstatistica vwCadest = new SicEstatistica();
	DidCadastro vwDidcad = new DidCadastro();
	SicTabelas vwDvetab = new SicTabelas();
	// Telas/relatorios utilizados
	Scrpe002A scrpe002A;
	Scrpe002Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrpe002 scrpe002Anterior;
	String faseproc = "0";

	// NOME DO IDENTIFICADO
	private int dtfim = 0;
	private String chalfa1 = "";
	// private String descel1 = "";
	// CONTEM
	// private String motida = "";
	private String motid2 = "";
	private int i = 1;
	private int j = 0;
	// private String wop1 = "";
	// private String wop2 = "";
	private int[] mat0 = new int[16];
	private int[][] tra0 = new int[8][16];
	private int[] tot0 = new int[8];
	private int[] mat1 = new int[51];
	private String[] conimp = new String[3];
	private int[][] tra1 = new int[8][51];
	private String obs1 = "";
	private String obs2 = "";
	// private int iposto = 0;
	// private int[] mposto = new int[11];
	private int[] mdata = new int[11];
	private int[] total = new int[11];
	private int totg = 0;
	private int cont = 0;
	// private long jRegger = 0;
	private String tdesc = "TOTAL.....:";

	private Scrpe002A preMapas() throws ParseException {
		scrpe002A = new Scrpe002A(true, sessao);

		Arrays.fill(mat0, 0);
		Arrays.fill(tra0, 0);
		Arrays.fill(tot0, 0);
		Arrays.fill(mat1, 0);
		Arrays.fill(conimp, "");
		Arrays.fill(tra1, 0);
		Arrays.fill(mdata, 0);
		Arrays.fill(total, 0);
		obs1 = "ATESTADOS QUE CONSTAM NO ARQUIVO    ";
		obs2 = "DE IDENTIFICACAO CIVIL              ";
		cont = 0;
		totg = 0;

		report.setJcont(0);
		report.setJcont1(0);
		scrpe002A.setWop1("");
		scrpe002A.setWop2("");
		for (int i1 = 1; i1 <= 10; i1++) {
			mdata[i1] = 0;
			report.setMposto(i1, 0);
		}
		scrpe002A.setDataCorrente(String.valueOf(UtilBean.inverteDataCorrente()));
		return scrpe002A;
	}

	public Scrpe002(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Scrpe002A scrpe002A) {
		try {
			main(scrpe002A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			// excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Scrpe002A pscrpe002A) throws Exception {
		if (pscrpe002A == null) {
			primeiraVez = true;
			// scrpe002A = new Scrpe002A (primeiraVez);
			scrpe002A = preMapas();
			scrpe002A.setNavegar("../scrpe002/executar");
			result.include("scrpe002A", scrpe002A);
			sessao.setAtributo("SCRPE002", this);
			scrpe002A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pscrpe002A);
		}

		scrpe002A.receberTela(false, result);
		if (scrpe002A.getWop1().trim().equals("") && scrpe002A.getWop2().trim().equals("")) {
			scrpe002A.enviarMensagem("wop1", "MARQUE X PARA MOSTRAR NA TELA OU IMPRIMIR");
			return;
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			scrpe002A.enviarMensagem(null, "");
			return;
		}
		if (UtilBean.validarMascara(scrpe002A.getDatini(), "yyyyMMdd")) {
			scrpe002A.enviarMensagem("ddt", "DATA INICIAL INVALIDA");
			return;
		}
		if (scrpe002A.getAdt() < 1998) {
			scrpe002A.enviarMensagem("adt", "ANO INVALIDO < 1998");
			return;
		}
		if (UtilBean.validarMascara(scrpe002A.getDatfim(), "yyyyMMdd")) {
			scrpe002A.enviarMensagem("dfi", "DATA FINAL INVALIDA");
			return;
		}
		if (scrpe002A.getAfi() < 1998) {
			scrpe002A.enviarMensagem("afi", "ANO INVALIDO < 1998");
			return;
		}
		report.setDatfim(scrpe002A.getDatfim());
		report.setDatini(scrpe002A.getDatini());
		report.setDataCorrente(scrpe002A.getDataCorrente());
		report.setDtini(scrpe002A.getDatini());
		report.setDtini((int) funcoes.sissd002(report.getDtini()));
		dtfim = scrpe002A.getDatfim();
		dtfim = (int) funcoes.sissd002(dtfim);
		if (report.getDtini() > dtfim) {
			UtilBean.mensagemTexto("DATA INICIAL > DATA FINAL");
		}
		scrpe002A.setMotida("");
		scrpe002A.setMotida(UtilBean.moveSubstring(scrpe002A.getMotida(), 0, 3, "A", "IDC"));
		scrpe002A.setMotida(UtilBean.moveSubstring(scrpe002A.getMotida(), 3, 2, "N", 99));
		scrpe002A.setMotida(UtilBean.moveSubstring(scrpe002A.getMotida(), 5, 8, "N", report.getDtini()));
		motid2 = scrpe002A.getMotida();
		motid2 = UtilBean.moveSubstring(motid2, 5, 8, "N", dtfim);
		sessao.setAtributo("SCRPE002", this);
		result.include("scrpe002A", scrpe002A);
		scrpe002A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		// DEFINE PRINTER(EMF = 1)
		// RELATORIO 1 PS=60 LS=132 SG=OFF
		report = new Scrpe002Report();
		report.setPageSize(60);
		report.setLineSize(132);
		// RELATORIO
		// report.gravaRelatorio(1);
		// UtilBean.mensagemTexto("  "
		// "* GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E CIDADANIA"
		// "PAGINA..:" *PAGE-NUMBER(EMF)
		// "* STI- SUBGERENCIA DE TECNOLOGIA DA INFORMCAO - VIVA CIDADAO"
		// "DATA....:" *DATE "* INSTITUICAO DE IDENTIFICACAO"
		// "* ATESTADOS DE ANTECEDENTES EMITIDOS" "PERIODO: "
		// scrpe002A.getDatini() " -" scrpe002A.getDatfim() "PROGRAMA: SCRPE002"
		// "-" "REG. GERAL." "NOME DO INDIVIDUO" "DAT. EMISS" "MAT.FUN" "POSTO"
		// "-");
		// RELATORIO
		detalhe();
		rodape();
		report.imprimir();
	}

	private void detalhe() throws Exception {
		// Par�grafo: i1Find()
		while (vwCadest.pesquisaMotidaFaixa(UtilBean.subStr(scrpe002A.getMotida(), 0, 3), Integer.parseInt(UtilBean.subStr(scrpe002A.getMotida(), 3, 2)), Integer.parseInt(scrpe002A.getMat()), Integer.parseInt(UtilBean.subStr(scrpe002A.getMotida(), 5, 8)), dtfim)) {
			// String pCodigoModelo,
			// Integer pCodigoTipo, Integer pMatriculaFunc,
			// Integer pDataAtualizIni, Integer pDataAtualizFim)
			if (vwCadest.getQuantTrans(7) > 0 && vwCadest.getDataAtualiz() > 0 && vwCadest.getNumeroPosto() > 0) {
				cont += 1;
				if (cont > 50) {
					// scrpe002B.enviarReceberTela(false, result);
					cont = 0;
				}
				if (scrpe002A.getIposto() == 0) {

					j = 1;
					dados();
				} else {
					if (scrpe002A.getIposto() == vwCadest.getNumeroPosto()) {

						j = 1;
						dados();
					} else {
						break;
					}
				}
			}
			if (vwCadest.quebraDinestdatatu()) {
				if (j > 0) {
					i += 1;
					totalDia();
					report.setJcont(0);
				}
			}

		}
	}

	private void rodape() throws ParseException, JRException {
		if (scrpe002A.getWop1().equals("X")) {
			tdesc = "TOTAL GERAL:";
			report.gravaRelatorio(2);

		}
		if (scrpe002A.getWop2().equals("X")) {
			report.saltaLinhas(3);
			report.gravaRelatorio(2);

			// RELATORIO
		}
	}

	private void totalDia() throws ParseException, JRException {
		if (scrpe002A.getWop1().equals("X")) {
			if (i > 10) {
				report.gravaRelatorio(3);

				for (int i1 = 1; i1 <= 10; i1++) {
					report.setMposto(i1, 0);
					mdata[i1] = 0;
					total[i1] = 0;
				}

				i = 1;
			}
		} else {
			if (i > 10) {

				i = 1;
			}
			report.gravaRelatorio(3);

			// RELATORIO
			for (int i1 = 1; i1 <= 10; i1++) {
				report.setMposto(i1, 0);
			}
			report.saltaLinhas(1);
		}
	}

	private void dados() throws Exception {
		// s1 = UtilBean.moveSubstring(s1, 0, 3, "N", 888);
		// s1 = UtilBean.moveSubstring(s1,3,
		// 12,"N",vwCadest.getMatriculaFunc());
		// */
		// TABELA DE USER-ID/POSTO
		if (vwCadest.getMatriculaFunc() == 0) {
			vwCadest.setMatriculaFunc(0);
		}
		while (vwDvetab.pesquisaTabele(888, (long) vwCadest.getMatriculaFunc())) {
			// 405
			report.setDescel1(vwDvetab.getDescricaoElem());
			report.setTPosto(UtilBean.subStr(vwDvetab.getDescricaoElem(), 38, 3));
			chalfa1 = vwDvetab.getChaveAlfaAcesso();

			while (vwDidcad.pesquisaNumeroRg(vwCadest.getNumeroRg())) {
				// 409
				if (vwDidcad.totalRegistros() == 0) {
					report.setJnomeide("");
					report.setJregger(0);
				}

				report.setJnomeide(vwDidcad.getNomeIdent());
				report.setJregger(vwDidcad.getNumeroRg());

			}
			if (scrpe002A.getWop1().equals("X")) {
				if (i > 10) {
					report.gravaRelatorio(4);

					for (int i1 = 1; i1 <= 10; i1++) {
						report.setMposto(i1, 0);
					}
					for (int i1 = 1; i1 <= 10; i1++) {
						mdata[i1] = 0;
					}
					for (int i1 = 1; i1 <= 10; i1++) {
						total[i1] = 0;
					}

					i = 1;
				}
			}
			report.setDtini(vwCadest.getDataAtualiz());
			report.setDtini((int) funcoes.sissd002(report.getDtini()));
			report.setJcont(report.getJcont() + 1);
			report.setJcont1(report.getJcont1() + 1);
			totg = totg + 1;
			mdata[i] = report.getDtini();
			report.setMposto(i, vwCadest.getNumeroPosto());
			report.setDinestMatfun(vwCadest.getMatriculaFunc());
			total[i] = report.getJcont();
			if (scrpe002A.getWop2().equals("X")) {
				report.gravaRelatorio(4);

				// RELATORIO
			}
		}
	}

	private void restaurarEstados(Scrpe002A pscrpe002A) {
		this.scrpe002Anterior = (Scrpe002) sessao.getAtributo("SCRPE002");
		if (pscrpe002A != null) {
			scrpe002A = pscrpe002A;
		} else {
			scrpe002A = this.scrpe002Anterior.scrpe002A;
		}
		scrpe002A.setSessao(sessao);
		this.faseproc = this.scrpe002Anterior.faseproc;
	}
}
